home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / dev / asm / basmify.lha / Basmify / NextError.ced < prev   
Text File  |  1995-09-26  |  8KB  |  321 lines

  1. /* Show errors produced by Assemble.ced.
  2.  
  3. **
  4. ** This ARexx script show the next of the errors in the
  5. ** error list of BAsm, after a Assemble.ced run.
  6. ** CygnusEd is used to display the errors.
  7. **
  8. ** Written and copyright in 1995 by Ulrich Flegel.
  9. ** All rights are reserved to the author Ulrich Flegel.
  10. **
  11. ** Publication and distribution only allowed by explicitly written permission from the author.
  12. ** This software may be distribute on the Aminet CD-ROMs.
  13. **
  14. ** system requirements:
  15. **    Assemble.ced        (V1.0    or higher)
  16. **    CygnusEd        (V3.5    or higher)
  17. **    BAsm            (V1.123  or higher)
  18. **    SetEnv            (AmigaOS release)
  19. **    rx            (ARexx   release)
  20. **
  21. ** current version of this script:
  22. **
  23. ** $VER: NextError.ced V1.0 (15-Sep-95)
  24. **
  25. ** usage:
  26. ** call as ARexx Macro from CygnusEd as: NextError.ced
  27. ** 
  28. */
  29.  
  30. /*============================================================================*/
  31.  
  32. OPTIONS RESULTS                    /* enable return codes     */
  33.  
  34. /*============================================================================*/
  35.  
  36. /* parameters used to control this program */
  37.  
  38. /* NextError.ced  Port_CygnusEd */
  39.  
  40. PARSE ARG Port_CygnusEd
  41.  
  42. /*============================================================================*/
  43.  
  44. /* adapt the following variables to your system environment: */
  45.  
  46. Assemble        = 'BAsmify:Assemble.ced'    /* here substitute the complete path/name of the Assemble.ced script */
  47. MaxViews    = 20                /* here substitue the maximum number of views CygnusEd is able to open */
  48.  
  49. /*============================================================================*/
  50.  
  51. /* Only Assemble.ced may supply the parameter Port_CygnusEd above !! */
  52. /* If parameter correct, it is assumed, that the first error is not to be skipped */
  53.  
  54.  
  55. IF (LEFT(Port_CygnusEd, 8) = 'rexx_ced') THEN
  56.     InvokedByAssembleScript = TRUE
  57. ELSE
  58.     InvokedByAssembleScript = FALSE
  59.  
  60. /*============================================================================*/
  61.  
  62. BAsmError_Max        = 200
  63. BAsmError_OK        = 0
  64. BAsmError_False        = 20
  65. BAsmError_OpenError    = 1
  66. BAsmError_SourceError    = 2
  67. BAsmError_ReadError    = 3
  68. BAsmError_UnknownOption    = 4
  69. BAsmError_MemoryError    = 5
  70. BAsmError_NoSourceFile    = 6
  71. BAsmError_NoNextError    = 7
  72. BAsmError_NoErrorList    = 8
  73. BAsmError_NoNextWarning    = 9
  74. BAsmError_NoWarningList    = 10
  75.  
  76. /*============================================================================*/
  77.  
  78. /* ARexx ports used */
  79.  
  80. Port_BAsm='rexx_BASM'
  81.  
  82. IF (Port_CygnusEd='') THEN Port_CygnusEd=ADDRESS()
  83. IF (LEFT(Port_CygnusEd, 8) ~= 'rexx_ced') THEN Port_CygnusEd='rexx_ced'
  84.  
  85. /*============================================================================*/
  86.  
  87. ScriptErrorLevel = 6
  88.  
  89. SIGNAL ON SYNTAX                /* ensure clean exit       */
  90.  
  91. IF ~ SHOW('P', Port_CygnusEd) THEN        /* is CygnusEd AREXX port available ? */
  92. DO
  93.     Say 'This script may only called by CygnusEd!'
  94. END
  95. ELSE
  96. DO
  97.  
  98. OPTIONS FAILAT ScriptErrorLevel            /* ignore warnings         */
  99.  
  100. /*============================================================================*/
  101.  
  102. /*
  103. ** Non localized strings used
  104. */
  105.  
  106.  
  107. STRING_ThisScript='NextError.ced'
  108.  
  109. /*
  110. ** Localization of strings used
  111. */
  112.  
  113. ADDRESS VALUE Port_CygnusEd
  114. /*'QUERY CAT'*/            /* !!! here find out which language CED uses currently */
  115. Language=RESULT
  116. SELECT
  117. WHEN Language='deutsch' THEN
  118.     DO
  119.     STRING_Positive='OK'
  120.     STRING_Negative='Abbrechen'
  121.     STRING_Dismiss='Aufgeben'
  122.     STRING_BAsmFailure_Title='BAsm Fehler-Report'
  123.     ERROR_NoBAsm='Der Source wurde noch nicht assembliert! Soll dies JETZT geschehen?'
  124.     ERROR_BASM_UnknownErrorCode='Ein unbekannter Fehler ist aufgetreten!'
  125.     ERROR_BASM_NoNextErrorWarning='Keine weiteren Fehler bzw. Warnungen vorhanden!'
  126.     ERROR_BASM_NoErrorWarningList='Keine Fehlerliste bzw. Warnungsliste vorhanden!'
  127.     END
  128. /*
  129. WHEN Language='XXX' THEN
  130.     DO
  131.     STRING_Positive='XXX'
  132.     STRING_Negative='XXX'
  133.     STRING_Dismiss='XXX'
  134.     STRING_BAsmFailure_Title='XXX'
  135.     ERROR_NoBAsm='XXX!'
  136.     ERROR_BASM_UnknownErrorCode='XXX!'
  137.     ERROR_BASM_NoNextErrorWarning='XXX!'
  138.     ERROR_BASM_NoErrorWarningList='XXX!'
  139.     END
  140. */
  141. OTHERWISE
  142.     DO
  143.     STRING_Positive='OK'
  144.     STRING_Negative='Cancel'
  145.     STRING_Dismiss='Dismiss'
  146.     STRING_BAsmFailure_Title='BAsm error report'
  147.     ERROR_NoBAsm='The source is not yet assembled! Assemble NOW?'
  148.     ERROR_BASM_UnknownErrorCode='An unknown error occurred!'
  149.     ERROR_BASM_NoNextErrorWarning='No more errors/warnings!'
  150.     ERROR_BASM_NoErrorWarningList='No error/warnings list!'
  151.     END
  152. END
  153.  
  154. /*============================================================================*/
  155.  
  156. /*
  157. ** Finally do something 
  158. */
  159.  
  160. IF ~ SHOW('P', Port_BAsm) THEN        /* is BAsm running ? */
  161.     DO
  162.     ADDRESS VALUE Port_CygnusEd
  163.     'OKAY2 '||ERROR_NoBAsm
  164.     IF (RESULT = 1) THEN ADDRESS COMMAND 'SYS:RexxC/rx '||Assemble
  165.     END
  166. ELSE
  167.     DO
  168.     OPTIONS FAILAT BAsmError_NoWarningList+1
  169.  
  170.     ADDRESS VALUE Port_BAsm
  171.  
  172.     IF (InvokedByAssembleScript = TRUE) THEN    /* do not step over first error/warning! */
  173.         DO
  174.  
  175.         'BINITERROR'
  176.         IF (RC = BAsmError_NoErrorList) THEN
  177.             CALL RexxSetEnv( 'BAsmError.ced', 'end' )
  178.         ELSE
  179.             CALL RexxSetEnv( 'BAsmError.ced', 'init' )
  180.  
  181.         'BINITWARNING'
  182.         IF (RC = BAsmError_NoWarningList) THEN
  183.             CALL RexxSetEnv( 'BAsmWarning.ced', 'end' )
  184.         ELSE
  185.             CALL RexxSetEnv( 'BAsmWarning.ced', 'init' )
  186.  
  187.         END
  188.  
  189.     ErrorState   = RexxGetEnv( 'BAsmError.ced' )
  190.     WarningState = RexxGetEnv( 'BAsmWarning.ced' )
  191.  
  192.     SELECT
  193.     WHEN (ErrorState = 'init') THEN    CALL RexxSetEnv( 'BAsmError.ced', 'step' )
  194.     WHEN (ErrorState = 'step') THEN
  195.         DO
  196.         'BNEXTERROR'
  197.         IF (RC = BAsmError_NoNextError) THEN
  198.             DO
  199.             CALL RexxSetEnv( 'BAsmError.ced', 'end' )
  200.             IF (WarningState = 'init') THEN CALL RexxSetEnv( 'BAsmWarning.ced', 'step' )
  201.             END
  202.         END
  203.     WHEN (ErrorState = 'end') THEN
  204.         SELECT
  205.         WHEN (WarningState = 'init') THEN CALL RexxSetEnv( 'BAsmWarning.ced', 'step' )
  206.         WHEN (WarningState = 'step') THEN
  207.             DO
  208.             'BNEXTWARNING'
  209.             IF (RC = BAsmError_NoNextWarning) THEN
  210.                 DO
  211.                 CALL RexxSetEnv( 'BAsmWarning.ced', 'end' )
  212.                 'BEND'
  213.                 ADDRESS VALUE Port_CygnusEd
  214.                 'OKAY1 '||ERROR_BASM_NoNextErrorWarning
  215.                 END
  216.             END
  217.         WHEN (WarningState = 'end') THEN 
  218.             DO
  219.             'BEND'
  220.             ADDRESS VALUE Port_CygnusEd
  221.             'OKAY1 '||ERROR_BASM_NoErrorWarningList
  222.             END
  223.         OTHERWISE Say "Internal error: Invalid warning state!"
  224.         END
  225.     OTHERWISE Say "Internal error: Invalid error state!"
  226.     END
  227.  
  228.     ErrorState   = RexxGetEnv( 'BAsmError.ced' )
  229.     WarningState = RexxGetEnv( 'BAsmWarning.ced' )
  230.  
  231.     IF ((ErrorState = 'step')|(WarningState = 'step')) THEN
  232.         DO
  233.         ADDRESS VALUE Port_BAsm
  234.  
  235.         IF (ErrorState='step') THEN 
  236.             'BGETERROR'
  237.         ELSE
  238.             'BGETWARNING'
  239.  
  240.         IF ((RC = BAsmError_OK)&(RESULT ~= '')) THEN
  241.             DO
  242.             PARSE VAR RESULT FailureLine '|' FailureOffset '|' FailureFile '|' FailureType ' ' FailureNumber ': ' FailureString '.'
  243.             ADDRESS VALUE Port_CygnusEd
  244.             'JUMP TO FILE '||FailureFile
  245.             IF (RESULT = 0) THEN        /* file with error not in any view */
  246.                 DO
  247.                 'STATUS 66'        /* total # of open views */
  248.                 IF (RESULT >= MaxViews) THEN
  249.                     DO
  250.                     'OKAY1 '||FailureType||' #'||FailureNumber||' in line '||FailureLine||' of '||FaileFile||': '||FailureString||'.'
  251.                     END
  252.                 ELSE
  253.                     DO
  254.                     'OPEN NEW'            /* make new view */
  255.                     'OPEN "'||FailureFile||'"'    /* load file with error into new view */
  256.                     'JUMP TO BYTE '||FailureOffset
  257.                     'OKAY1 '||FailureType||' #'||FailureNumber||' in line '||FailureLine||': '||FailureString||'.'
  258.                     END
  259.                 END
  260.             ELSE
  261.                 DO
  262.                 'JUMP TO BYTE '||FailureOffset
  263.                 'OKAY1 '||FailureType||' #'||FailureNumber||' in line '||FailureLine||': '||FailureString||'.'
  264.                 END
  265.             END
  266.         END
  267.     END
  268.  
  269. OPTIONS FAILAT ScriptErrorLevel
  270.  
  271. /*=============================================================================*/
  272.  
  273. END    /* IF ~ SHOW('P', Port_CygnusEd) */
  274.  
  275. EXIT
  276.  
  277. SYNTAX:
  278.  
  279. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  280. ADDRESS VALUE Port_CygnusEd
  281. 'OKAY1 Script error!'
  282. EXIT
  283.  
  284.  
  285. RexxSetEnv: PROCEDURE
  286.     PARSE ARG Name,Content
  287.  
  288.     ADDRESS COMMAND 'SetEnv "ENV:'||Name||'" "'||Content||'"'
  289.  
  290.     RETURN
  291.  
  292.  
  293. RexxGetEnv: PROCEDURE
  294.     PARSE ARG Name
  295.  
  296.     IF OPEN(EnvFile,'ENV:'||Name,'r') THEN
  297.         DO
  298.         Content = READLN(EnvFile)
  299.         CALL CLOSE EnvFile
  300.         END
  301.     ELSE Content = ""
  302.  
  303.     RETURN Content
  304.  
  305.  
  306. /*=============================================================================*/
  307.  
  308.  
  309. /*
  310. ** version history:
  311. ** ---------------
  312. **
  313. ** V1.0        : -first public version
  314. **
  315. ** known bugs in the latest version/revision:
  316. ** -----------------------------------------
  317. ** - No localization supported. I don't know the ARexx CygnusEd command to find out the currect used language.
  318. **
  319. */
  320.  
  321.